package com.baizw.cultivation.module.admin.controller;

import cn.hutool.core.util.ArrayUtil;
import com.baizw.cultivation.common.page.CustomPage;
import com.baizw.cultivation.common.response.ResultBean;
import com.baizw.cultivation.enums.StatusEnum;
import com.baizw.cultivation.module.admin.entity.DeptEntity;
import com.baizw.cultivation.module.admin.service.DeptService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 单位管理
 *
 * @author 剧终1204
 * @version V1.0
 * @date 2020年05月27日 11:01
 */
@RestController
@Api(tags = "单位管理")
@RequestMapping("/api/dept")
public class DeptController {

    @Autowired
    private DeptService deptService;

    /**
     * 获取部门列表
     */
    @ApiOperation("获取部门列表")
    @GetMapping({"/list", "/list/exclude/{deptIds}"})
    public ResultBean<List<DeptEntity>> list(@PathVariable(required = false) Long[] deptIds) {
        LambdaQueryWrapper<DeptEntity> queryWrapper = Wrappers.<DeptEntity>lambdaQuery()
                .ne(DeptEntity::getStatus, StatusEnum.REMOVED.getCode())
                .notIn(ArrayUtil.isNotEmpty(deptIds), DeptEntity::getId, deptIds);
        return ResultBean.ok(deptService.list(queryWrapper));
    }

    /**
     * 查询部门列表（排除节点）
     */
    @PostMapping("/list/page")
    @ApiOperation("分页查询部门列表")
    public ResultBean excludeChild(@RequestBody CustomPage page) {
        LambdaQueryWrapper<DeptEntity> queryWrapper = Wrappers.<DeptEntity>lambdaQuery()
                .ne(DeptEntity::getStatus, StatusEnum.REMOVED.getCode());
        return ResultBean.ok(deptService.page(page, queryWrapper));
    }

    /**
     * 根据部门编号获取详细信息
     */
    @ApiOperation("根据部门编号获取详细信息")
    @GetMapping(value = "/info/{deptId}")
    public ResultBean getInfo(@PathVariable Long deptId) {
        return ResultBean.ok(deptService.getById(deptId));
    }

    /**
     * 获取部门下拉树列表
     */
//    @GetMapping("/tree/select")
//    public ResultBean treeSelect() {
//        List<DeptEntity> depts = deptService.selectDeptList(dept);
//        return ResultBean.ok(deptService.buildDeptTreeSelect(depts));
//    }
//
//    /**
//     * 加载对应角色部门列表树
//     */
//    @GetMapping(value = "/roleDeptTreeselect/{roleId}")
//    public ResultBean roleDeptTreeselect(@PathVariable("roleId") Long roleId) {
//        List<DeptEntity> depts = deptService.selectDeptList(new DeptEntity());
//        ResultBean ajax = ResultBean.success();
//        ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
//        ajax.put("depts", deptService.buildDeptTreeSelect(depts));
//        return ResultBean.ok();
//    }

    /**
     * 新增部门
     */
//    @PostMapping("/save")
//    public ResultBean add(@Validated @RequestBody DeptEntity dept) {
//        if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) {
//            return ResultBean.error("新增部门'" + dept.getDeptName() + "'失败，部门名称已存在");
//        }
//        dept.setCreateBy(SecurityUtils.getUsername());
//        return toAjax(deptService.insertDept(dept));
//    }
//
//    /**
//     * 修改部门
//     */
//    @PreAuthorize("@ss.hasPermi('system:dept:edit')")
//    @Log(title = "部门管理", businessType = BusinessType.UPDATE)
//    @PutMapping
//    public ResultBean edit(@Validated @RequestBody DeptEntity dept) {
//        if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) {
//            return ResultBean.error("修改部门'" + dept.getDeptName() + "'失败，部门名称已存在");
//        } else if (dept.getParentId().equals(dept.getDeptId())) {
//            return ResultBean.error("修改部门'" + dept.getDeptName() + "'失败，上级部门不能是自己");
//        } else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus())
//                && deptService.selectNormalChildrenDeptById(dept.getDeptId()) > 0) {
//            return ResultBean.error("该部门包含未停用的子部门！");
//        }
//        dept.setUpdateBy(SecurityUtils.getUsername());
//        return toAjax(deptService.updateDept(dept));
//    }
//
//    /**
//     * 删除部门
//     */
//    @PreAuthorize("@ss.hasPermi('system:dept:remove')")
//    @Log(title = "部门管理", businessType = BusinessType.DELETE)
//    @DeleteMapping("/{deptId}")
//    public ResultBean remove(@PathVariable Long deptId) {
//        if (deptService.hasChildByDeptId(deptId)) {
//            return ResultBean.error("存在下级部门,不允许删除");
//        }
//        if (deptService.checkDeptExistUser(deptId)) {
//            return ResultBean.error("部门存在用户,不允许删除");
//        }
//        return toAjax(deptService.deleteDeptById(deptId));
//    }
}
